// 这里配置一个 axios 拦截器

import axios from 'axios'
// 先创建一个 axios 的实例
const instance = axios.create({
  // 这里是设置 axios 的 baseURL 请求基础路径
  baseURL: 'http://kumanxuan1.f3322.net:8001',
  // 这里设置多长时间为超时
  timeout: 5000
})

// ! 两种拦截的区别
// * 封装 axios 拦截器：拦截的是请求，一般用在需要在请求中添加请求信息(例如请求头)
// * 路由拦截：拦截的是页面，可以决定用户有没有权利访问某个页面

// 这里定义拦截器(interceptors: 拦截器)
// 1. interceptors.request: 拦截请求
instance.interceptors.request.use(config => {
  // 这个函数什么时候执行？   在请求发送之前执行
  // 这个函数可以做什么？     可以判断用户是否登录，如果没有登录，则可以直接 return 下面的请求就不会执行
  // config：本次请求所携带的信息(包含：请求方式、请求url、请求头...)
  const token = localStorage.getItem('token')
  if (token) {
    // ! 携带登录凭证发起请求
    config.headers['X-Nideshop-Token'] = token // *添加请求头
  }
  return config
}, error => {
  return Promise.reject(error)
})
// 2. interceptors.response: 拦截响应
instance.interceptors.response.use(response => {
  // 这个函数什么时候执行？   在接受到响应之前，在执行 .then 方法之前
  // response：本次服务器响应携带的信息
  // console.log(response)
  return response.data // 返回的 response.data 会被 .then 方法中的 response 参数所接收
}, error => {
  // console.log(error)
  return Promise.reject(error)
})

// 定义完 axios 拦截器要导出暴露接口，导出 instance 实例
// 3. 第三步才到 .then 的到数据
export default instance
